Vue Router
https://gyazo.com/2778d4aa16bc2de6c5030d0a49b64659
公式リンク
Vue Router は Vue.js 公式ルータです。
これは Vue.js のコアと深く深く統合されており、Vue.js でSPA Single Page Applicationを構築します。
機能
ネストされたルート/ビューマッピング
モジュール式、コンポーネントベースのルータ構造
ルートパラメータ、クエリ、ワイルドカード
Vue.js の Transition トランジション 機能による、transition エフェクトの表示
細かいナビゲーションコントロール
自動で付与される active CSS クラス
HTML5 history モードまたは hash モードと IE9 の互換性
カスタマイズ可能なスクロール動作
モード
history ヒストリー
HTML5 History モード | Vue Router
HTML5のHTML History.pushStateを使ってる
SPA Single Page Applicationにおいて、直接URLにアクセスされると404になる
対策:単純な catch-all フォールバックのためのルートをサーバー側で追加
{ path: '*', component: NotFoundComponent }
hash ハッシュ
HTML History使えないやつに使う
IE9以下
プロパティ
$route
Props
Props
ルートコンポーネントにプロパティを渡す | Vue Router
遷移時にデータ渡したい際に使う
Vuexを使うまでもない
storeから消えてしまう恐れのあるモノの取得用id
ネスト
children
Guard ガード
ナビゲーションガード | Vue Router
code:rouer.js
const router = new VueRouter({ ... })
router.beforeEach((to, from, next) => {
// ...
})
権限によるアクセス分岐したい
Vuexで保存されているUserアイテムの権限で分岐する必要あり
Vue.jsのナビゲーションガードを使って、ユーザ別のトップページに画面遷移させる。 - Qiita
Protecting Vue Routes with Navigation Guards | CSS-Tricks
How to implement route guard in vue.js - Vue.js Developers - Medium
router-link
API リファレンス | Vue Router router-link
名前付きルート
⭕️to={name:'hoge'}
❌to="/hoge"
変更箇所が少なくて済む
router-view
API リファレンス | Vue Router router-view
リダイレクト
リダイレクトとエイリアス | Vue Router
メタフィールド
ルートメタフィールド | Vue Router
code:router/index.js
routes: [
{
path: 'bar',
component: Bar,
// メタフィールド 認証
meta: { requiresAuth: true }
}
]})
router.beforeEach((to, from, next) => {
// 上位ルートを含めて認証が必要なルートがあるか確認
if (to.matched.some(page => page.meta.requiresAuth)) {
// 認証状態を確認
if(!auth.loggedIn()){
next({
path: '/login',
query: { redirect: to.fullPath }
})
} else {
next()
} else {
next()
}
})
Vue.js 2.0 でログイン (vue-router で認証が必要な URL を定義) - Qiita
Vue.js で簡単なログイン画面 (トークン認証) を作ってみた - Qiita
トランジション
Vue.jsのTransition トランジション
データ取得
データ取得 | Vue Router
遷移前の取得
遷移後の取得
スクロール Scroll イベント
スクロールの振る舞い | Vue Router
注意: この機能は ブラウザが history.pushState をサポートしている場合のみ動作します
用途
画面遷移後のScroll スクロール
lazy-load
Lazy load 遅延読み込み機能
遅延ローディングルート | Vue Router
TODO
ベストプラクティスを知りたい
認証 Authentication
Vue.js 2.0 でログイン (vue-router で認証が必要な URL を定義) - Qiita
動的ルート
困りごと
vue-router pushがundefined
scriptでrouterを使うときは、importする
code:view.js
import router from "@/router/index";
router.push({ name: "home" });
How To Set Up Vue.js Authentication and Route Handling Using vue-router | DigitalOcean